package design_pattern.Volatile;

/**
 * @Author: 蔡翔
 * @Date: 2019/10/25 16:01
 * @Version 1.0
 *
 * 下面demo 存在数据不一致问题，就是因为我这个线程中修改了数据，但是其他线程不知道。
 */
public class VolatileTest2 {
    // 假设volatile 只去主内存 拿一次。
    // volatile 并不能 保证原子性，如果两个线程对INIT_VALUE同时写，
    private volatile static int INIT_VALUE = 0;
    //private static int INIT_VALUE = 0;

    private final static int MAX_LIMIT = 50;

    public static void main(String[] args) {
        new Thread(()->{
            while (INIT_VALUE<MAX_LIMIT){
                System.out.println("T1->"+(++INIT_VALUE));
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        },"ADDER-1").start();

        new Thread(()->{
            while (INIT_VALUE<MAX_LIMIT){
                System.out.println("T2->"+(++INIT_VALUE));
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        },"ADDER-2").start();
    }
}
